package be.vdab.entities;

import java.io.Serializable;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;

@Entity
@Table(name = "soorten")
public class Soort implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	private long soortNr;
	private String naam;
	private long landNr;
	@OneToMany
	@JoinColumn(name = "soortNr")
	@OrderBy("jaar")
	private Set<Wijn> wijnen;

	protected Soort() {

	}

	public Soort(String naam, long landNr) {
		super();
		setNaam(naam);
		setLandNr(landNr);
		wijnen = new LinkedHashSet<Wijn>();
	}

	public String getNaam() {
		return naam;
	}

	public void setNaam(String naam) {
		this.naam = naam;
	}

	public long getLandNr() {
		return landNr;
	}

	public void setLandNr(long landNr) {
		this.landNr = landNr;
	}

	public long getSoortNr() {
		return soortNr;
	}
	
	public Set<Wijn> getWijnen() {
		return Collections.unmodifiableSet(wijnen);
	}

	public void addWijn(Wijn wijn) {
		wijnen.add(wijn);
	}

	public void removeWijn(Wijn wijn) {
		wijnen.remove(wijn);
	}

	@Override
	public boolean equals(Object obj) {
		if (!(obj instanceof Soort)) {
			return false;
		}
		return ((Soort) obj).naam.equalsIgnoreCase(this.naam);
	}

	@Override
	public int hashCode() {
		return naam.toUpperCase().hashCode();
	}

	@Override
	public String toString() {
		return naam;
	}

}
